package controller.lista;

/**
 * Fila de objetos
 * @author Bruno
 * @version 1
 */
public class Fila {
	private No inicio;
	private int tamanho;
	
	/**
	 * Construtor da fila
	 */
	public Fila(){
		inicio = null;
		tamanho = 0;
	}
	
	/**
	 * Adiciona um valor na fila
	 * @param add Objeto a ser adicionado.
	 */
	public void adiciona(Object add){
		if(inicio == null)
			inicio = new No(add);
		else {
			No aux = inicio;
			while(aux.prox != null)
				aux = aux.prox;
			
			aux.prox = new No(add);
		}
		tamanho++;
	}
	
	/**
	 * Remove um objeto da fila
	 * @return Objeto removido.
	 * @return Se o tamanho for igual a 0 retorna null. 
	 */
	public Object remove(){
		if(tamanho == 0){
			System.out.println("Fila vazia.");
			return null;
		}
		No aux = inicio;
		inicio = inicio.prox;
		tamanho--;
		return aux.dado;
	}
	
	/**
	 * Retorna o tamanho da fila
	 * @return Tamanho da fila.
	 */
	public int getTamanho(){
		return tamanho;
	}
	
	/**
	 * Lista todos os elementos da fila
	 * @return Elementos da fila em um vetor do tipo Object
	 */
	public Object[] getFila(){
		Object[] lista = new Object[tamanho];
		No aux = inicio;
		for(int cont = 0 ; cont < tamanho ; cont++){
			lista[cont] = aux.dado;
			aux = aux.prox;
		}
		return lista;
	}
}
